home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / tools / xb / fncsrc / iocsfnc.has < prev    next >
Text File  |  1995-06-13  |  4KB  |  254 lines

  1.  
  2.     .include    doscall.mac
  3.     .include    iocscall.mac
  4.     .include    fefunc.h
  5.     .include    fdef.h
  6.  
  7.  
  8.     .text
  9.     .even
  10.  
  11.     .dc.l    ret
  12.     .dc.l    ret
  13.     .dc.l    ret
  14.     .dc.l    ret
  15.     .dc.l    ret
  16.     .dc.l    ret
  17.     .dc.l    ret
  18.     .dc.l    ret
  19.     .dc.l    ptr_token
  20.     .dc.l    ptr_param
  21.     .dc.l    ptr_exec
  22.     .dc.l    0,0,0,0,0
  23.  
  24. ret:
  25.     rts
  26. ptr_token:
  27.     .dc.b    'bpeek',0
  28.     .dc.b    'wpeek',0
  29.     .dc.b    'lpeek',0
  30.     .dc.b    'bpoke',0
  31.     .dc.b    'wpoke',0
  32.     .dc.b    'lpoke',0
  33.     .dc.b    'iocs',0
  34.     .dc.b    '_arp',0
  35.     .dc.b    '_vrp',0
  36.     .dc.b    0
  37.     .even
  38. ptr_param:
  39.     .dc.l    p_bpeek
  40.     .dc.l    p_wpeek
  41.     .dc.l    p_lpeek
  42.     .dc.l    p_bpoke
  43.     .dc.l    p_wpoke
  44.     .dc.l    p_lpoke
  45.     .dc.l    p_iocs
  46.     .dc.l    p_arp
  47.     .dc.l    p_vrp
  48. ptr_exec:
  49.     .dc.l    e_bpeek
  50.     .dc.l    e_wpeek
  51.     .dc.l    e_lpeek
  52.     .dc.l    e_bpoke
  53.     .dc.l    e_wpoke
  54.     .dc.l    e_lpoke
  55.     .dc.l    e_iocs
  56.     .dc.l    e_arp
  57.     .dc.l    e_vrp
  58.  
  59.  
  60.  
  61.  
  62. p_bpeek:
  63. p_wpeek:
  64. p_lpeek:
  65.     .dc.w    int_val
  66.     .dc.w    int_ret
  67.  
  68. p_bpoke:
  69. p_wpoke:
  70. p_lpoke:
  71.     .dc.w    int_val        * adr
  72.     .dc.w    int_val        * var1
  73.     .dc.w    int_omt
  74.     .dc.w    int_omt
  75.     .dc.w    int_omt
  76.     .dc.w    int_omt
  77.     .dc.w    int_omt
  78.     .dc.w    int_omt
  79.     .dc.w    int_omt
  80.     .dc.w    int_omt        * var9
  81.     .dc.w    void_ret
  82. p_iocs:
  83.     .dc.w    int_val        * d0
  84.     .dc.w    int_omt        * d1
  85.     .dc.w    int_omt        * d2
  86.     .dc.w    int_omt        * d3
  87.     .dc.w    int_omt        * d4
  88.     .dc.w    int_omt        * d5
  89.     .dc.w    $00ff        * a1 (省略可能な 1 or 2 次元の全ての型の配列)
  90.     .dc.w    $00ff        * a2
  91.     .dc.w    int_ret
  92. p_arp:
  93.     .dc.w    $007f        * 1 or 2 次元の全ての型の配列
  94.     .dc.w    int_ret        * address
  95. p_vrp:
  96.     .dc.w    $001f        * 全ての型の変数のポインタ
  97.     .dc.w    int_ret        * address
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105. e_iocs:
  106.     move.l    par1+6(sp),d0    * IOCS CALL NUMBER
  107.     move.l    par2+6(sp),d1
  108.     move.l    par3+6(sp),d2
  109.     move.l    par4+6(sp),d3
  110.     move.l    par5+6(sp),d4
  111.     move.l    par6+6(sp),d5
  112.     lea.l    par7(sp),a0
  113.     bsr    dim_data
  114.     movea.l    a2,a1
  115.     addq.l    #8,a0        * par8
  116.     bsr    dim_data
  117.     trap    #$f
  118.     bra    return_d0
  119. dim_data:
  120.     tst.w    (a0)+
  121.     bmi    2f
  122.     movea.l    4(a0),a2
  123.     move.w    4(a2),d7    * 次元 - 1 = 0,1
  124.     beq    1f
  125.     addq.l    #6,a2        * 2-dim
  126. 1:
  127.     lea.l    10(a2),a2
  128. 2:
  129.     rts
  130.  
  131. e_arp:
  132.     movea.l    par1+6(sp),a0    * 1 or 2 次元の全ての型の配列
  133.     move.w    4(a0),d0    * 次元
  134.     beq    @f
  135.     addq.l    #6,a0
  136. @@:
  137.     lea.l    10(a0),a0
  138.     move.l    a0,d0        * データ領域の先頭
  139.     bra    return_d0
  140. e_vrp:
  141.     move.l    par1+6(sp),d0    * 全ての型の変数のポインタ
  142.     bra    return_d0
  143.  
  144.  
  145.  
  146.  
  147. e_bpeek:
  148.     movea.l    par1+6(sp),a1
  149.     moveq    #0,d0
  150.     move.b    #_B_BPEEK,d0
  151.     trap    #$f
  152.     bra    return_d0
  153. e_wpeek:
  154.     movea.l    par1+6(sp),a1
  155.     bsr    parity_check
  156.     moveq    #0,d0
  157.     move.b    #_B_WPEEK,d0
  158.     trap    #$f
  159.     bra    return_d0
  160. e_lpeek:
  161.     movea.l    par1+6(sp),a1
  162.     bsr    parity_check
  163.     IOCS    _B_LPEEK
  164.     bra    return_d0
  165.  
  166.  
  167. e_bpoke:
  168.     movea.l    par1+6(sp),a1
  169.     lea.l    par2(sp),a0
  170.     moveq    #9-1,d2
  171. @@:
  172.     tst.w    (a0)+
  173.     bmi    1f
  174.     move.b    7(a0),d1
  175.     IOCS    _B_BPOKE
  176.     bra    2f
  177. 1:
  178.     addq.l    #1,a1
  179. 2:
  180.     addq.l    #8,a0
  181.     dbra    d2,@b
  182.     bra    return_zero
  183. e_wpoke:
  184.     movea.l    par1+6(sp),a1
  185.     bsr    parity_check
  186.     lea.l    par2(sp),a0
  187.     moveq    #9-1,d2
  188. @@:
  189.     tst.w    (a0)+
  190.     bmi    1f
  191.     move.w    6(a0),d1
  192.     IOCS    _B_WPOKE
  193.     bra    2f
  194. 1:
  195.     addq.l    #2,a1
  196. 2:
  197.     addq.l    #8,a0
  198.     dbra    d2,@b
  199.     bra    return_zero
  200. e_lpoke:
  201.     movea.l    par1+6(sp),a1
  202.     bsr    parity_check
  203.     lea.l    par2(sp),a0
  204.     moveq    #9-1,d2
  205. @@:
  206.     tst.w    (a0)+
  207.     bmi    1f
  208.     move.l    4(a0),d1
  209.     IOCS    _B_LPOKE
  210.     bra    2f
  211. 1:
  212.     addq.l    #4,a1
  213. 2:
  214.     addq.l    #8,a0
  215.     dbra    d2,@b
  216.     bra    return_zero
  217. parity_check:
  218.     move.l    a1,d0
  219.     btst    #0,d0
  220.     bne    @f
  221.     rts
  222. @@:
  223.     addq.l    #4,sp
  224.     lea.l    odd_adr(pc),a1
  225.     moveq    #1,d0
  226.     rts
  227. odd_adr:
  228.     .dc.b    '奇数アドレスを指定しました',0
  229.     .even
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236. **    **    **    **    **    **    **    **    **    **
  237.  
  238. return_zero:
  239.     moveq.l    #0,d0
  240. return_d0:
  241.     lea.l    fac(pc),a0
  242.     move.l    d0,6(a0)
  243.     moveq.l    #0,d0
  244.     rts
  245.  
  246.     .even
  247. fac:
  248.     .dc.w    0
  249.     .dc.l    0
  250.     .dc.l    0
  251.     .end
  252.  
  253.  
  254.